home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / tcp_ip / wnos / wn941101 / finger.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-10  |  1.6 KB  |  74 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "socket.h"
  6. #include "session.h"
  7. #include "proc.h"
  8. #include "netuser.h"
  9. #include "commands.h"
  10. #include "tty.h"
  11.  
  12. int
  13. dofinger(argc,argv,p)
  14. int argc;
  15. char *argv[];
  16. void *p;
  17. {
  18.     struct sockaddr_in sock;
  19.     char *cp;
  20.     int s,i;
  21.     struct mbuf *bp;
  22.     struct session *sp;
  23.  
  24.     /* Allocate a session descriptor */
  25.     if((sp = newsession(argv[1],FINGER,0,1)) == NULLSESSION){
  26.         tputs(Nosess);
  27.         return 1;
  28.     }
  29.     sp->ttystate.echo = sp->ttystate.edit = 0;
  30.     sp->flowmode = Cooked;
  31.     sock.sin_family = AF_INET;
  32.     sock.sin_port = IPPORT_FINGER;
  33.     for(i=1;i<argc;i++){
  34.         if((cp = strchr(argv[i],'@')) == NULLCHAR) {
  35.             tprintf("%s: local names not supported\n",argv[i]);
  36.             continue;
  37.         }
  38.         *cp++ = '\0';
  39.         tprintf("%s@%s -- ",argv[i],cp);
  40.         tprintf("Resolving %s... ",cp);
  41.         if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  42.             tprintf(Badhost,cp);
  43.             continue;
  44.         }
  45.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  46.             tputs(Nosocket);
  47.             break;
  48.         }
  49.         sockmode(s,SOCK_ASCII);
  50.         tprintf("Trying %s...",psocket((struct sockaddr *)&sock));
  51.  
  52.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  53. /*
  54.             cp = sockerr(s);
  55.             tprintf("Finger session failed: %s\n",cp != NULLCHAR ? cp : "");
  56. */
  57.             close_s(s);
  58.             sp->s = -1;
  59.             continue;
  60.         }
  61.         tputs("\n");
  62.         usprintf(s,"%s\n",argv[i]);
  63.         usflush(Curproc->output);
  64.         while(recv_mbuf(s,&bp,0,NULLCHAR,(int *)0) > 0){
  65.             send_mbuf(Curproc->output,bp,0,NULLCHAR,0);
  66.         }
  67.         close_s(s);
  68.         sp->s = -1;
  69.     }
  70.     keywait(NULLCHAR,1);
  71.     freesession(sp);
  72.     return 0;
  73. }
  74.